﻿using UnityEditor;
using UnityEditor.Callbacks;
using UnityEngine;

// 定义编辑器扩展命名空间
namespace EditorExtension
{
    // 使用InitializeOnLoad特性标记类，编辑器启动时自动执行静态构造函数
    [InitializeOnLoad] 
    public class EditorEventAttributeExample
    {
        // 静态构造函数：编辑器首次加载时执行（优先级最高）
        static EditorEventAttributeExample()
        {
            Debug.Log("InitializeOnLoad"); // 输出初始化日志
        }

        // 编辑器初始化完成后立即执行的方法
        [InitializeOnLoadMethod] 
        static void InitializeOnLoadMethod()
        {
            Debug.Log("InitializeOnLoadMethod"); // 输出初始化完成日志
        }
        
        // 脚本编译完成后触发的方法
        [DidReloadScripts] 
        static void DidReloadScripts()
        {
            Debug.Log("DidReloadScripts"); // 输出脚本重载完成日志
        }
        
        // 场景加载完成后执行的方法
        [PostProcessScene]
        static void PostProcessScene()
        {
            Debug.Log("PostProcessScene"); // 输出场景加载完成日志
        }
        
        // 项目构建完成后执行的方法
        [PostProcessBuild]
        static void PostProcessBuild(BuildTarget target, string path)
        {
            Debug.Log($"PostProcessBuild - 平台：{target} 路径：{path}"); // 输出构建信息
        }

        // 资源打开时的回调方法（优先级1）
        [OnOpenAsset(1)]
        static bool OnOpenAsset1(int instanceID, int line)
        {
            Debug.Log("OnOpenAsset1 - 优先级1资源打开"); // 输出高优先级资源打开日志
            return false; // 返回false表示未处理该事件
        }
        
        // 资源打开时的回调方法（优先级2）
        [OnOpenAsset(2)]
        static bool OnOpenAsset2(int instanceID, int line)
        {
            Debug.Log("OnOpenAsset2 - 优先级2资源打开"); // 输出低优先级资源打开日志
            return false; // 返回false表示未处理该事件
        }
    }
}